import { App } from 'vue'
import { FIRST_NAME } from '@/constants'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'

/* 注册全局组件 */
/* 使用 <def-chart></def-chart> */
export default {
  install(app: App) {
    // 导入符合规则的文件
    const requireComponent = require.context('../../base-ui', true, /\.vue$/)
    // 逻辑处理
    requireComponent.keys().forEach((fullPath) => {
      // 获取组件文件夹名
      let componentName = fullPath.replace('./', '').replace('/index.vue', '')
      if (componentName === 'icons') {
        // icons单独处理
        componentName = 'icon'
      }
      // 获取组件的 PascalCase 名
      componentName = FIRST_NAME + upperFirst(camelCase(componentName))
      // 获取组件配置
      const componentConfig = requireComponent(fullPath)
      // 全局组件注册
      app.component(
        componentName,
        // 在 `.default` 上查找组件选项。
        // 如果组件导出了 `export default` 的话，该选项会存在。
        // 否则回退到模块的根。
        componentConfig.default || componentConfig
      )
    })
  }
}
